package zly.learningandroid.activity

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
// `R`包是Android SDK自动生成的, 包含了`res`目录中申明的资源.
// 上级包`AndroidManifest.xml`文件中的`<manifest package>`中指定.
import zly.learningandroid.R

// `Activity`是个界面组件, 用于和用户交互.
// 所有`Activity`必须继承`Activity`父类.
// 这里`MainActivity`继承`AppCompatActivity`,间接继承了`Activity`,因为它提供了旧版兼容性.
class MainActivity : AppCompatActivity() {
    // `onCreate`方法必须被重写, 方法里需要指定初始化过程,例如加载`layout`.
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d(localClassName, "开始onCreate")
        super.onCreate(savedInstanceState)
        // `layout`包含界面资源.
        // `string`包含字符串资源.
        // `drawable`包含图片资源.
        // `mipmap`包含图标资源.
        // 以此类推.
        setContentView(R.layout.activity_main)
        // 如果不引入`kotlin-android-extensons`,必须使用`findViewById(R.id.button)`获得组建的引用.
        buttonToast.setOnClickListener {
            Log.d(localClassName, "开始buttonToast.setOnClickListener")
            // `Toast.makeText`产生一个Toast悬浮提示, 在屏幕底部居中显示.
            // 第一个参数是Context上下文,这里使用Activity作为Context.
            // 第二个参数是提示信息.
            // 第三个是显示时间长度, 有`Toast.LENGTH_SHORT`或Toast.LENGTH_LONG.
            Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show()
        }

        buttonGotoSecondActivity.setOnClickListener {
            Log.d(localClassName, "开始buttonGotoSecondActivity.setOnClickListener")

            // 显式`Intent`
            // 创建显式`Intent`，第一个参数是`Context`上下文对象，这里使用当前`Activity`；第二个参数是要开启的活动的类。
            val intent = Intent(this, SecondActivity::class.java)
            // `startActivity`接收一个`Intent`，启动目标活动。
            startActivity(intent)
        }

        buttonGotoThirdActivity.setOnClickListener {
            Log.d(localClassName, "开始buttonGotoThirdActivity.setOnClickListener")

            // 隐式`Intent`
            // 创建隐式`Intent`，传入`action`，之后通过`addCategory`添加`category`
            val intent = Intent("zly.intent.action.ACTION_THIRD")
            // `android.intent.category.DEFAULT`不必显式配置，因为`startActivity`总是位隐式`Intent`添加此`cateogyr`。
            intent.addCategory("zly.intent.category.MY_CATEGORY")
            // `startActivity`接收一个`Intent`，启动目标活动。
            startActivity(intent)
        }
    }

    // `onCreateOptionsMenu`在初始化菜单时调用. 传入`Menu`供用户自定义初始化.
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        // 通过`Activity.getMenuInflater`获取一个`menuInflater`.
        menuInflater.inflate(R.menu.options, menu)
        return true
    }

    // `onOptionsItemSelected`是菜单项点击是的回调.
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // 使用`itemId`判断哪个菜单项触发了点击事件.
        when (item.itemId) {
            R.id.menuitem_show_another_toast -> Toast.makeText(this, R.string.another_toast_message, Toast.LENGTH_SHORT).show()
            R.id.menuitem_quit_program ->
                // `Activity.finish`主动退出当前活动，类似系统的`后退`按键。
                // 如果返回栈有其他活动，则返回到之前的活动。
                // 如果返回栈没有其他活动，则退出程序。
                finish()
        }
        return true
    }
}